// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 6.14.2013
{$CLEO .cs}

//-------------MAIN---------------
thread 'CRMSL3' 
1@ = 0 
8@ = -1.0 

:CRMSL3_28
wait 0 
if 
   Player.Defined($PLAYER_CHAR)
else_jump @CRMSL3_28 
if 
   Player.Controllable($PLAYER_CHAR)
else_jump @CRMSL3_28 
if or
   Actor.DrivingVehicleType($PLAYER_ACTOR, #MAVERICK)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #DODO)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #LEVIATHN)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #SHAMAL)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #RUSTLER)
else_jump @CRMSL3_28 
11@ = Actor.CurrentCar($PLAYER_ACTOR)
1@ = 1 

:CRMSL3_130
wait 0 
03CF: load_wav 17006 as 1 
03CF: load_wav 21001 as 2 
if and
03D0:   wav 1 loaded 
03D0:   wav 2 loaded 
else_jump @CRMSL3_130 

:CRMSL3_167
wait 0 
if 
056E:   car 11@ defined 
else_jump @CRMSL3_269 
10@ = Car.Health(11@)
if and
  10@ >= 250 
   not Car.Wrecked(11@)
   Actor.InCar($PLAYER_ACTOR, 11@)
else_jump @CRMSL3_269 
gosub @CRMSL3_314 
gosub @CRMSL3_374 
gosub @CRMSL3_1330 
gosub @CRMSL3_1102 
gosub @CRMSL3_2838 
jump @CRMSL3_167 

:CRMSL3_269
1@ = 0 

:CRMSL3_276
wait 0 
if and
03D2:   wav 1 ended 
03D2:   wav 2 ended 
else_jump @CRMSL3_276 
040D: unload_wav 1 
040D: unload_wav 2 
jump @CRMSL3_28 

:CRMSL3_314
0407: store_coords_to 12@ 13@ 14@ from_car 11@ with_offset 0.0 50.0 0.45 
0407: store_coords_to 5@ 6@ 7@ from_car 11@ with_offset 0.0 5.0 0.45 
return 

:CRMSL3_374
if 
  1@ == 1 
else_jump @CRMSL3_731 
3@ = 0.866 
0@ = -1 
0A8D: 4@ = read_memory 12010644 size 4 virtual_protect 0 
4@ += 4 
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0 
29@ = 0 

:CRMSL3_449
0A8D: 2@ = read_memory 4@ size 1 virtual_protect 0 
4@ += 1 
if and
  2@ >= 0 
  128 > 2@ 
else_jump @CRMSL3_697 
005A: 2@ += 29@ // (int) 
if and
056E:   car 2@ defined 
803B:   not  2@ == 11@ // (int) 
else_jump @CRMSL3_697 
0407: store_coords_to 18@ 19@ 20@ from_car 2@ with_offset 0.0 0.0 0.0 
050A: 10@ = distance_between_XYZ 18@ 19@ 20@ and_XYZ 5@ 6@ 7@ 
9@ = Car.Health(2@)
if and
  9@ >= 250 
   not Car.Wrecked(2@)
  500.0 > 10@ 
06BD:   no_obstacles_between 5@ 6@ 7@ and 18@ 19@ 20@ solid 1 car 0 actor 0 object 1 particle 0 
0ABE:   vehicle 2@ engine_on 
else_jump @CRMSL3_697 
gosub @CRMSL3_894 
if 
0025:   10@ > 3@ // (float) 
else_jump @CRMSL3_697 
0087: 3@ = 10@ // (float) 
0085: 0@ = 2@ // (int) 

:CRMSL3_697
29@ += 256 
if 
  29@ > 27904 
else_jump @CRMSL3_449 
jump @CRMSL3_892 

:CRMSL3_731
if 
  1@ > 1 
else_jump @CRMSL3_892 
if 
056E:   car 0@ defined 
else_jump @CRMSL3_878 
0407: store_coords_to 18@ 19@ 20@ from_car 0@ with_offset 0.0 0.0 0.0 
050A: 10@ = distance_between_XYZ 18@ 19@ 20@ and_XYZ 5@ 6@ 7@ 
if and
   not Car.Wrecked(0@)
  500.0 > 10@ 
else_jump @CRMSL3_878 
gosub @CRMSL3_894 
if 
  10@ > 0.866 
else_jump @CRMSL3_878 
jump @CRMSL3_892 

:CRMSL3_878
1@ = 1 
0@ = -1 

:CRMSL3_892
return 

:CRMSL3_894
0087: 26@ = 18@ // (float) 
0087: 27@ = 19@ // (float) 
0087: 28@ = 20@ // (float) 
0063: 26@ -= 5@ // (float) 
0063: 27@ -= 6@ // (float) 
0063: 28@ -= 7@ // (float) 
0087: 21@ = 12@ // (float) 
0087: 22@ = 13@ // (float) 
0087: 23@ = 14@ // (float) 
0063: 21@ -= 5@ // (float) 
0063: 22@ -= 6@ // (float) 
0063: 23@ -= 7@ // (float) 
006B: 26@ *= 21@ // (float) 
006B: 27@ *= 22@ // (float) 
006B: 28@ *= 23@ // (float) 
0087: 10@ = 26@ // (float) 
005B: 10@ += 27@ // (float) 
005B: 10@ += 28@ // (float) 
050A: 27@ = distance_between_XYZ 18@ 19@ 20@ and_XYZ 5@ 6@ 7@ 
050A: 28@ = distance_between_XYZ 12@ 13@ 14@ and_XYZ 5@ 6@ 7@ 
006B: 27@ *= 28@ // (float) 
0073: 10@ /= 27@ // (float) 
return 

:CRMSL3_1102
if 
  0@ >= 0 
else_jump @CRMSL3_1160 
gosub @CRMSL3_1620 
gosub @CRMSL3_2127 
if 
03CA:   object 25@ exists 
else_jump @CRMSL3_1160 
Object.Destroy(25@)
Object.RemoveReferences(25@)

:CRMSL3_1160
return 

:CRMSL3_1162
if 
  1@ == 1 
else_jump @CRMSL3_1209 
26@ = 64 
27@ = 255 
28@ = 0 
jump @CRMSL3_1328 

:CRMSL3_1209
if 
  1@ == 2 
else_jump @CRMSL3_1257 
26@ = 55 
27@ = 255 
28@ = 255 
jump @CRMSL3_1328 

:CRMSL3_1257
if 
  1@ == 3 
else_jump @CRMSL3_1304 
26@ = 255 
27@ = 0 
28@ = 55 
jump @CRMSL3_1328 

:CRMSL3_1304
26@ = 255 
27@ = 255 
28@ = 255 

:CRMSL3_1328
return 

:CRMSL3_1330
if and
  0@ >= 0 
056E:   car 0@ defined 
else_jump @CRMSL3_1611 
10@ = Car.Health(0@)
if and
   not Car.Wrecked(0@)
  10@ >= 250 
else_jump @CRMSL3_1611 
if 
04A9:   actor $PLAYER_ACTOR driving_heli 
else_jump @CRMSL3_1425 
if 
00E1:   player 0 pressed_key 4 
else_jump @CRMSL3_1611 
jump @CRMSL3_1442 

:CRMSL3_1425
if 
00E1:   player 0 pressed_key 18 
else_jump @CRMSL3_1611 

:CRMSL3_1442
if 
  1@ == 1 
else_jump @CRMSL3_1485 
03D1: play_wav 1 
1@ = 2 
TIMERA = 0 
15@ = 0 

:CRMSL3_1485
if 
  1@ == 2 
else_jump @CRMSL3_1618 
0085: 9@ = 15@ // (int) 
0085: 10@ = TIMERA // (int) 
9@ /= 150 
10@ /= 150 
if 
001D:   10@ > 9@ // (int) 
else_jump @CRMSL3_1558 
03D1: play_wav 1 

:CRMSL3_1558
0085: 15@ = TIMERA // (int) 
if 
  TIMERA > 600 
else_jump @CRMSL3_1618 
TIMERA = 500 
03D1: play_wav 2 
1@ = 3 
jump @CRMSL3_1618 

:CRMSL3_1611
1@ = 1 

:CRMSL3_1618
return 

:CRMSL3_1620
if 
   not Model.Available(1582)
else_jump @CRMSL3_1666 
Model.Load(1582)
038B: load_requested_models 

:CRMSL3_1643
   not Model.Available(1582)
else_jump @CRMSL3_1666 
wait 0 
jump @CRMSL3_1643 

:CRMSL3_1666
25@ = Object.Create(1582, 0.0, 0.0, 0.0)
Object.SetImmunities(25@, 1, 1, 1, 1, 1)
0750: set_object 25@ visibility 0 
068E: get_camera_target_point_to 2@ 3@ 4@ 
068D: get_camera_position_to 5@ 6@ 7@ 
0063: 2@ -= 5@ // (float) 
0063: 3@ -= 6@ // (float) 
0063: 4@ -= 7@ // (float) 
0087: 28@ = 2@ // (float) 
0087: 29@ = 3@ // (float) 
gosub @CRMSL3_1870 
0509: 28@ = distance_between_XY 2@ 3@ and_XY 0.0 0.0 
0087: 29@ = 4@ // (float) 
0087: 4@ = 27@ // (float) 
gosub @CRMSL3_1870 
0087: 2@ = 27@ // (float) 
2@ += -270.0 
2@ *= -1.0 
0453: set_object 25@ XYZ_rotation 2@ 4@ 0.0 
return 

:CRMSL3_1870
0509: 27@ = distance_between_XY 28@ 29@ and_XY 0.0 0.0 
0073: 28@ /= 27@ // (float) 
0073: 29@ /= 27@ // (float) 
0509: 27@ = distance_between_XY 28@ 29@ and_XY 0.0 1.0 
16@ = 0 

:CRMSL3_1935
27@ /= 2.0 
006B: 27@ *= 27@ // (float) 
0087: 29@ = 27@ // (float) 
27@ *= -1.0 
27@ += 1.0 
01FB: 27@ = square_root 27@ 
27@ *= -1.0 
27@ += 1.0 
006B: 27@ *= 27@ // (float) 
005B: 27@ += 29@ // (float) 
01FB: 27@ = square_root 27@ 
16@ += 1 
  16@ > 11 
else_jump @CRMSL3_1935 
27@ *= 4096.0 
27@ /= 3.141592 
27@ *= 180.0 
if 
  28@ > 0.0 
else_jump @CRMSL3_2125 
27@ *= -1.0 
27@ += 360.0 

:CRMSL3_2125
return 

:CRMSL3_2127
0889: store_actor $PLAYER_ACTOR center_of_body_position_to 5@ 6@ 7@ 
0407: store_coords_to 2@ 3@ 4@ from_car 0@ with_offset 0.0 0.0 0.0 
050A: 10@ = distance_between_XYZ 5@ 6@ 7@ and_XYZ 2@ 3@ 4@ 
068D: get_camera_position_to 5@ 6@ 7@ 
gosub @CRMSL3_2220 
gosub @CRMSL3_2452 
return 

:CRMSL3_2220
068D: get_camera_position_to 5@ 6@ 7@ 
0063: 5@ -= 2@ // (float) 
0063: 6@ -= 3@ // (float) 
0063: 7@ -= 4@ // (float) 
5@ *= -1.0 
6@ *= -1.0 
0400: store_coords_to 5@ 6@ 7@ from_object 25@ with_offset 5@ 7@ 6@ 
0073: 5@ /= 7@ // (float) 
0073: 6@ /= 7@ // (float) 
0801: get_camera_zoom_factor_to 4@ // float 
4@ /= 2.0 
02F7: 2@ = cosine 4@ // (float) 
02F6: 3@ = sine 4@ // (float) 
0073: 2@ /= 3@ // (float) 
006B: 5@ *= 2@ // (float) 
006B: 6@ *= 2@ // (float) 
5@ *= 324.0 
6@ *= 304.0 
if 
  0.0 > 7@ 
else_jump @CRMSL3_2430 
5@ = 640.0 
6@ = 480.0 

:CRMSL3_2430
5@ += 320.0 
6@ += 223.0 
return 

:CRMSL3_2452
gosub @CRMSL3_1162 
03F0: enable_text_draw 1 
03E3: set_texture_to_be_drawn_antialiased 0 
10@ = 30.0 
10@ /= 2.0 
0087: 21@ = 5@ // (float) 
0087: 22@ = 6@ // (float) 
0063: 22@ -= 10@ // (float) 
038E: draw_box_position 21@ 22@ size 30.0 1.0 RGBA 26@ 27@ 28@ 192 
22@ += 30.0 
038E: draw_box_position 21@ 22@ size 30.0 1.0 RGBA 26@ 27@ 28@ 192 
0063: 22@ -= 10@ // (float) 
0063: 21@ -= 10@ // (float) 
038E: draw_box_position 21@ 22@ size 1.0 30.0 RGBA 26@ 27@ 28@ 192 
21@ += 30.0 
038E: draw_box_position 21@ 22@ size 1.0 30.0 RGBA 26@ 27@ 28@ 192 
21@ -= 30.0 
005B: 22@ += 10@ // (float) 
0407: store_coords_to 5@ 6@ 7@ from_car 11@ with_offset 0.0 5.0 0.45 
0407: store_coords_to 18@ 19@ 20@ from_car 0@ with_offset 0.0 0.0 0.0 
050A: 10@ = distance_between_XYZ 18@ 19@ 20@ and_XYZ 5@ 6@ 7@ 
0092: 10@ = float 10@ to_integer 
033F: set_text_draw_letter_size 0.3 1.8 
0340: set_text_draw_RGBA 26@ 27@ 28@ 192 
0349: set_text_draw_font 2 
081C: draw_text_outline 0 RGBA 0 0 0 0 
045A: draw_text_1number 21@ 22@ GXT 'NUMBER' number 10@ 
return 

:CRMSL3_2838
if and
  1@ >= 3 
0AAB:   file_exists "CLEO/AAM4.S" 
00E1:   player 0 pressed_key 4 
  TIMERA >= 500 
else_jump @CRMSL3_2970 
10@ = 4.51 
006B: 10@ *= 8@ // (float) 
8@ *= -1.0 
0407: store_coords_to 12@ 13@ 14@ from_car 11@ with_offset 10@ 12.0 -0.45 
0A92: create_custom_thread "AAM4.S" 12@ 13@ 14@ 0@ 
TIMERA = 0 

:CRMSL3_2970
return 
